package com.example.liujie.Texturepacker

import com.badlogic.gdx.Game
import com.badlogic.gdx.Gdx
import com.badlogic.gdx.graphics.GL20
import com.badlogic.gdx.graphics.g2d.Sprite
import com.badlogic.gdx.graphics.g2d.SpriteBatch
import com.badlogic.gdx.graphics.g2d.TextureAtlas
import com.badlogic.gdx.graphics.g2d.TextureRegion


class TexturepackerGame :Game(){
    private var batch: SpriteBatch? = null

    // 纹理图集
    private var atlas: TextureAtlas? = null

    // 每个小图在在纹理图集中对应的名称常量（实际上就是小图的原文件名，定义在 myatlas.atlas 文件中）
    val MAN = "man"             // 人
    val MUSHROOM = "mushroom"   // 蘑菇
    val FLOWER = "flower"       // 鲜花
    val BUTTON = "button"       // 按钮

    // 小图对应的 纹理区域 或 精灵
    private var manRegion: TextureRegion? = null        // 人
    private var mushroomSprite: Sprite? = null          // 蘑菇
    private var flowerSprite: Sprite? = null            // 鲜花
    private var button1Region: TextureRegion? = null    // 按钮 1
    private var button2Region: TextureRegion? = null    // 按钮 2

    override fun create() {
        // 创建 SpriteBatch
        batch = SpriteBatch()

        // 读取 myatlas.atlas 文件创建纹理图集
        atlas = TextureAtlas(Gdx.files.internal("myatlas.atlas"))

        // 根据名称从纹理图集中获取纹理区域
        manRegion = atlas!!.findRegion(MAN)

        // 也可以根据名称直接由纹理图集创建精灵
        mushroomSprite = atlas!!.createSprite(MUSHROOM)
        flowerSprite = atlas!!.createSprite(FLOWER)

        /*
         * 根据 名称 和 索引 从纹理图集中获取纹理区域
         *
         * 特别说明:
         *     纹理图集中的小图名称一般就是小图的原文件名, 但可以给小图加上一个索引（index）属性, 就是在文件名后
         * 面加上下划线和表示索引的数字（name_index.png）, 例如 button_1.png 和 button_2.png 这两个小图文件,
         * gdx-tools 在合成纹理图集时会使用相同的名称（button）分别加上对应的索引值（1 和 2）表示。这样有助于对
         * 业务相同的图片进行统一命名。纹理图集对小图的描述定义在 myatlas.atlas 文件中, 这是一个文本文件, 可以用
         * 记事本打开查看。
         *
         * 因此下面获取按钮的纹理区域时使用 "button" 作为名称并加上对应的索引值来获取。
         */
        button1Region = atlas!!.findRegion(BUTTON, 1)
        button2Region = atlas!!.findRegion(BUTTON, 2)

        /* 给精灵设置位置属性 */
        flowerSprite!!.setPosition(190f, 80f)
        mushroomSprite!!.setPosition(190f, 290f)
    }

    override fun render() {
        // 黑色清屏
        Gdx.gl.glClearColor(0f, 0f, 0f, 1f)
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)

        // 开始绘制
        batch!!.begin()

        // 绘制精灵
        mushroomSprite!!.draw(batch!!)         // 蘑菇
        flowerSprite!!.draw(batch!!)           // 鲜花

        // 绘制纹理区域
        batch!!.draw(manRegion!!, 30f, 70f)      // 人
        batch!!.draw(button1Region!!, 30f, 340f) // 按钮 1
        batch!!.draw(button2Region!!, 30f, 286f) // 按钮 2

        // 绘制结束
        batch!!.end()
    }

    override fun dispose() {
        // 当应用退出时释放资源
        if (batch != null) {
            batch!!.dispose()
        }
        // 纹理图集关联了一张合成的大图, 应用退出时需要释放纹理图集资源
        if (atlas != null) {
            atlas!!.dispose()
        }
    }
}